# 导入
import pymysql

# 定义查询数据的函数

def mydb_select():
    # 建立数据库连接
    db = pymysql.connect(host='localhost',user='root',password='Changeme',db = 'mydb',charset = 'utf8')
    # 设置游标对象
    curser = db.cursor()
    #编写SQL语句
    sql = 'select * from demo'
    # 防止执行SQL出错而导致程序中断，做异常处理
    try:
        # 执行SQL语句
        curser.execute(sql)
        # 获取游标对象
        whole_data = curser.fetchall()
    # catch:
    except:
        print("数据库操作失败")

    return whole_data
    carser.clost()
    db.close()

# 定义一个在数据库添加数据的函数

def mydb_insert(info):
    db = pymysql.connect(host='localhost',user='root',password='',db = 'mydb',charset = 'utf8')
    curser = db.cursor()
    sql = "insert into demo (name,age,sex) VALUES ('%s','%d','%s')" % (info[0],info[1],info[2])
    try:
        curser.execute(sql)
        db.commit()
        return True
    except Exception as error:
        db.rollback()
        print ("数据库操作失败,原因是：",error)
    curser.close()
    db.close()
# 定义删除数据的函数
def mydb_delete (info):
    db = pymysql.connect(host='localhost',user='root',password='',db = 'mydb',charset = 'utf8')
    curser = db.cursor()
    sql = "delete from demo where id =%d " % info
    try:
        curser.execute(sql)
        db.commit()
        return True
    except Exception as error:
        db.rollback()
        print ("数据库操作失败,原因是：",error)
    db.close()
# 展示学员信息的函数
def showstu (stulist):
    if len(stulist)==0:
        print ("没有学员信息！")
        return
    print ("|{0:<5}|{1:<10}|{2:<5}|{3:<10}|".format("ID","name","age","sex"))
    print ("="*42)
    #遍历数据库查询的信息对象
    for stu in stulist:
        print("|{0:<5}|{1:<10}|{2:<5}|{3:<10}|".format(stu[0],stu[1],stu[2],stu[3]))
    print ("按任意键继续！")


while True :
    # 先获取数据库信息
    data = mydb_select()
    print ("="*42)
    print ("="*12,"学员信息管理系统","="*12)
    print ("{0:1}{1:15}{2:5}".format(" ","1. 查看学员信息","2. 添加学员信息"))
    print ("{0:1}{1:15}{2:5}".format(" ","3. 删除学员信息","4. 退出"))
    key = int(input("请输入你的选择："))

    if key == 1:
        print ("="*12,"1. 查看学员信息","="*12)
        showstu (data)

    if key == 2:
        print("="*12,"2. 添加学员信息","="*12)
        # 做一个循环可以多次添加学员信息
        while True :
            content = []
            name = input("请输入姓名：")
            content.append(name)
            age = int(input("请输入年龄："))
            content.append(age)
            sex = input("请输入你的性别：")
            # 以列表的格式收集输入的学员信息
            content.append(sex)
            info = {"name":name,"age":age,"sex":sex}
            # 将收集的信息传入数据库信息添加函数，如果添加成功则返回True
            if mydb_insert(content):
                print ("信息添加成功！")
                print ("|{0:<5}|{1:<10}|{2:<5}|{3:<10}|".format("ID","name","age","sex"))
                print("|{0:<5}|{1:<10}|{2:<5}|{3:<10}|".format(len(data)+1,info["name"],info["age"],info["sex"]))

                but = int(input("输入0可继续添加，其他任意键退出添加。"))
                # 输入除0以外的任何键退出添加
                if but != 0:
                    break
        # 更新数据信息后输出
        data = mydb_select()
        showstu(data)

    if key == 3:
        print("3. 删除学员信息")
        ID = int(input("请输入你要删除的ID号："))
        if mydb_delete(ID):
            print ("删除成功!")
        data = mydb_select()
        showstu (data)
    if key == 4 :
        print("再见!")
        break